package com.example.ruiji.controller;

import com.example.ruiji.pojo.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.UUID;

@Slf4j
@RestController
//文件上传
@RequestMapping("/common")
public class CommonController {
    //上传文件
    @Value("${reggie.path}")
        private String basePath;

@PostMapping("/upload")
    public R<String> upload(MultipartFile file)  {
        //这时候的file是一个临时文件
        //1.文件名序列化
        String originalFilename=file.getOriginalFilename();
        //截取文件名后缀
        String suffix=originalFilename.substring(originalFilename.lastIndexOf("."));

        String fileName= UUID.randomUUID().toString()+suffix;

        //2.文件保存路径  ->路径进行配置
        File dir=new File(basePath);
         if(!dir.exists())
         {
             dir.mkdirs();
         }
         //将文件进行转存
    try {
        file.transferTo(new File(basePath+fileName));
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    return  R.success(fileName);
}

    @GetMapping("/download")
    public void download(String name, HttpServletResponse response){
    //获取文件内容
        try {
            //读取文件内容
            FileInputStream fileInputStream=new FileInputStream(new File(basePath + name));
            //输入文件内容
            ServletOutputStream outputStream=response.getOutputStream();
            response.setContentType("image/jpeg");

            int len=0;

            byte[] bytes=new byte[1024];

            //读取文件内容拼凑发送
            //读内容到缓冲器 另利用输入流进行发送
            while ( (len=fileInputStream.read(bytes) ) != -1     )
            {
                outputStream.write(bytes,0,len);
                outputStream.flush();
            }
            //关闭资源
            outputStream.close();
            fileInputStream.close();


        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }


    }
}
